#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
// 4. 替换其他的语言所写的程序
int main()
{
    printf("我的程序要运行了！\n");
    execl("/usr/bin/python3","python","hello.py",NULL);
    printf("hello C\n");
    printf("我的程序结束了!\n");
}
// 3. 进程程序替换函数
//int main()
//{
//    printf("我的程序要运行了！\n");
//    // 自己组装的命令行参数表与环境变量表都是要以NULL结尾
//    char* const argv[] = { "ls", "-l","-a", NULL };
//    char* const envp[] = { "PATH=/bin:/usr/bin", NULL };
//    // 需写全路径
//    execve("/bin/ls",argv,envp);
//    printf("我的程序结束了!\n");
//    return 0;
//}
//int main()
//{
//    printf("我的程序要运行了！\n");
//    // 有环境变量PATH，不需写全路径                                                                  
//    execlp("ps", "ps", "-ef", NULL);
//    printf("我的程序结束了!\n");
//    exit(0);
//    return 0;
//}
//int main()
//{
//    printf("我的程序要运行了！\n");
//    // 无环境变量PATH，需写全路径
//    execl("/bin/ls","ls","-l",NULL); 
//    printf("我的程序结束了!\n");
//    exit(0);
//}
// 2. 非阻塞等待
//int main()
//{
//    printf("小美同意了小帅的约会请求，先让小帅在8号楼下等她化妆\n");
//    int ret=fork();
//    if(ret==0)
//    {
//        // child 
//        printf("小美正在化妆中...\n");
//        int n=10;
//        while(n--)
//        {
//            printf("小美化妆还有%d分钟\n",n);
//            sleep(1);
//        }
//        exit(0);
//    }
//    pid_t pid=0;
//    printf("小帅先去买了奶茶\n");
//    do {
//         pid = waitpid(-1,NULL,WNOHANG); // 非阻塞轮询，没等待子进程退出就返回0，等到子进程退出返回子进程pid
//         if(pid == 0)
//         {
//            sleep(2);
//            printf("小帅然后来到了8号楼下，一边等待小美，一边苦学高情商技巧...\n");
//         }   
//    }while(pid==0);
//    printf("小美正在下楼...\n");
//    printf("小帅等到了小美，与小美开心的约会去了\n");
//    return 0;
//}
// 1.阻塞等待
//int main()
//{
//    printf("小美同意了小帅的约会请求，先让小帅在8号楼下等她化妆\n");
//    printf("此时小帅知道了小美同意了他的请求，来到了8号楼下进行等待...\n");
//    int ret=fork();
//    if(ret==0)
//    {
//        // child
//        printf("小美正在化妆中...\n");
//        int n=10;
//        while(n--)
//        {
//            printf("小美化妆还有%d分钟\n",n);
//            sleep(1);
//        }
//        exit(0);
//    }
//    waitpid(-1,NULL,0);// 阻塞等待
//    printf("小帅一直在等待小美\n");
//    printf("最后等待成功，与小美一同约会去了\n");
//    return 0;
//}
//
